<!DOCTYPE html>
<html lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GCC Projects</title>
<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
</head>

<body>

<h1>GCC Projects</h1>

<p>This is an incomplete list of things you could work on if you want to
help develop GCC:</p>

<ul>
<li>If you are new to GCC, start with our list of <a
    href="beginner.html">projects for beginner GCC hackers.</a></li>
<li>Investigate bugs and attempt to fix bugs in our <a
    href="https://gcc.gnu.org/bugzilla/">bug tracker</a>,
    see whether they still are present in current GCC.</li>
<li><a href="../about.html#TODO">Projects for the GCC web pages.</a></li>
<li><a href="documentation.html">Projects for improving the GCC
    documentation</a>.</li>
<li>There are several <a href="../git.html#devbranches">development
    branches</a> with projects that you may be able to help out with.</li>
<li>Investigate and fix some of the known <a href="optimize.html">optimizer
    inadequacies</a>.</li>
<li><a href="cpplib.html">Projects for the C preprocessor.</a></li>
<li><a href="c-frontend.html">Projects for improving the C front end.</a></li>
<li><a href="cxx-status.html">Implementing new C++ features.</a></li>
<li><a href="gomp/">Implementing missing OpenMP features.</a></li>
<li><a href="gupc.html">The GNU UPC Project.</a></li>
<li><a href="#improve_the_installation_procedure">Improve the installation procedure</a></li>
<li><a href="#simpler_porting">Simpler porting</a></li>
<li><a href="#generalize_the_machine_model">Generalize the machine model</a></li>
</ul>

<p>Remember to <a href="../contributewhy.html">keep other developers
informed</a> of any substantial projects you intend to work on.</p>

<hr />

<h2 id="improve_the_installation_procedure">Improve the installation procedure</h2>

<ul>
  <li>See <a href="https://gcc.gnu.org/ml/gcc/2000-11/msg00556.html">a
  message from Zack Weinberg</a>, and follow-ups to it, for some
  discussion of some of these ideas.</li>

  <li>Move the installation from incomprehensible shell scripts in the
  Makefiles to more comprehensible shell scripts outside the Makefiles.</li>

  <li>When installing as root, make the installed headers in
  <code>$(libsubdir)</code> be owned by root rather than the user who
  did the build.</li>

  <li>Be consistent about what programs get links such as
  <code>i686-pc-linux-gnu-gcc</code> and
  <code>i686-pc-linux-gnu-gcc-3.4.1</code>.  Any program embedding
  architecture or version dependencies may need such links.</li>

  <li>Add a configure option <code>--enable-cc-links</code> or similar
  which causes links to the compiler driver or shell scripts to be
  installed under names <code>cc</code> (the traditional Unix compiler
  name and a legacy utility in Unix98, accepting an unspecified C
  language variant), <code>c89</code> (POSIX; a script running <code>gcc
  -std=c89 -pedantic</code>) and <code>c99</code> (the Austin Group
  revision of POSIX; a script running <code>gcc -std=c99
  -pedantic</code>) for systems such as GNU/Linux where GCC is the
  system compiler.</li>
</ul>

<h2 id="simpler_porting">Simpler porting</h2>

<p>Right now, describing the target machine's instructions is done
cleanly, but describing its addressing mode is done with several
ad-hoc macro definitions.  Porting would be much easier if there were
an RTL description for addressing modes like that for instructions.
Tools analogous to genflags and genrecog would generate macros from
this description.</p>

<p>There would be one pattern in the address-description file for each
kind of addressing, and this pattern would have:</p>

<ul>
  <li>the RTL expression for the address</li>
  <li>C code to verify its validity (since that may depend on
      the exact data).</li>
  <li>C code to print the address in assembly language.</li>
  <li>C code to convert the address into a valid one, if it is not valid.
      (This would replace LEGITIMIZE_ADDRESS).</li>
  <li>Register constraints for all indeterminates that appear
      in the RTL expression.</li>
</ul>

<h2 id="generalize_the_machine_model">Generalize the machine model</h2>

<p>Some new compiler features may be needed to do a good job on
machines where static data needs to be addressed using base registers.</p>

<p>Some machines have two stacks in different areas of memory, one
used for scalars and another for large objects.  The compiler does not
now have a way to understand this.</p>

</body>
</html>
